
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package itm.bo.convocatorias;

//~--- non-JDK imports --------------------------------------------------------
import itm.conexion.SQLServerConection;

import itm.dao.convocatorias.ConvocatoriaDAO;

import itm.exception.ControlException;

import itm.exception.ConvocatoriaException;
import itm.exception.DAOException;
import itm.vo.convocatorias.ConvocatoriaVO;
import itm.vo.convocatorias.PostuladosConvocatoriaVO;
import itm.vo.convocatorias.ProductoConvocatoriaVO;
import itm.vo.convocatorias.RubroVO;
import itm.vo.grupoInvestigacion.GrupoInvestigacionVO;
import itm.vo.personas.PersonaVO;
import itm.vo.prodructos.ProductoVO;
import itm.vo.proyectosInvestigacion.ProyectoInvestigacionVO;

//~--- JDK imports ------------------------------------------------------------

import java.sql.Connection;
import java.sql.SQLException;

import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author BISA19
 */
public class ConvocatoriasBO {

    SQLServerConection conexion = new SQLServerConection();
    ConvocatoriaDAO convocatoriaDAO;
    Connection dbConexion;

    public String insertarResultadoConvocatoria(ConvocatoriaVO convocatoriaVO, long idPostulado) throws ConvocatoriaException {
        String resultado = "";
        try {
            dbConexion = conexion.openConnection();
            convocatoriaDAO = new ConvocatoriaDAO(dbConexion);
            resultado = convocatoriaDAO.insertarResultadoCOnvocatoria(convocatoriaVO, idPostulado);
            conexion.commit();
            return resultado;
        } catch (ControlException ex) {
            try {
                Logger.getLogger(ConvocatoriasBO.class.getName()).log(Level.SEVERE, null, ex);
                conexion.rollback();
                throw new ConvocatoriaException("Error al hacer commit", ex);
            } catch (ControlException ex1) {
                Logger.getLogger(ConvocatoriasBO.class.getName()).log(Level.SEVERE, null, ex1);
                throw new ConvocatoriaException("Error al hacer rollback", ex1);
            }
        } catch (DAOException ex) {
            Logger.getLogger(ConvocatoriasBO.class.getName()).log(Level.SEVERE, null, ex);
            throw new ConvocatoriaException("Error: ConvocatoriasBO:insertarResultadoConvocatoria", ex);
        } finally {
            conexion.closeConnection(dbConexion);
        }
    }

    public List<PostuladosConvocatoriaVO> listarPostulados(ConvocatoriaVO convocatoriaVO) throws ControlException {
        List<PostuladosConvocatoriaVO> listaPostulados = new ArrayList<PostuladosConvocatoriaVO>();

        try {
            dbConexion = conexion.openConnection();
            convocatoriaDAO = new ConvocatoriaDAO(dbConexion);
            listaPostulados = convocatoriaDAO.listarPostulados(convocatoriaVO);
        } catch (SQLException ce) {
            ce.printStackTrace();
        } finally {
            conexion.closeConnection(dbConexion);
        }

        return listaPostulados;
    }

    public List<RubroVO> llenarRubroSF() throws ControlException {
        List<RubroVO> listaRubroSF = new ArrayList<RubroVO>();

        try {
            dbConexion = conexion.openConnection();
            convocatoriaDAO = new ConvocatoriaDAO(dbConexion);

            // listaTipo = personaDAO.llenarListaTipoId(tipoVO);
            listaRubroSF = convocatoriaDAO.llenarRubroSF();
        } catch (SQLException ce) {
            ce.printStackTrace();
        } finally {
            conexion.closeConnection(dbConexion);
        }

        return listaRubroSF;
    }

    public List<RubroVO> llenarRubroNF() throws ControlException {
        List<RubroVO> listaRubroNF = new ArrayList<RubroVO>();

        try {
            dbConexion = conexion.openConnection();
            convocatoriaDAO = new ConvocatoriaDAO(dbConexion);

            // listaTipo = personaDAO.llenarListaTipoId(tipoVO);
            listaRubroNF = convocatoriaDAO.llenarRubroNF();
        } catch (SQLException ce) {
            ce.printStackTrace();
        } finally {
            conexion.closeConnection(dbConexion);
        }

        return listaRubroNF;
    }

    public List<ProductoVO> llenarProducto() throws ControlException {
        List<ProductoVO> listaProducto = new ArrayList<ProductoVO>();

        try {
            dbConexion = conexion.openConnection();
            convocatoriaDAO = new ConvocatoriaDAO(dbConexion);
            listaProducto = convocatoriaDAO.llenarProducto();
        } catch (SQLException ce) {
            ce.printStackTrace();
        } finally {
            conexion.closeConnection(dbConexion);
        }

        return listaProducto;
    }

    public String crearConvocatoria(ConvocatoriaVO convocatoriaVO) throws ControlException {
        String errorM = "";

        try {
            dbConexion = conexion.openConnection();
            convocatoriaDAO = new ConvocatoriaDAO(dbConexion);
            errorM = convocatoriaDAO.crearConvocatoria(convocatoriaVO);
        } catch (SQLException ce) {
            ce.printStackTrace();
        } finally {
            conexion.closeConnection(dbConexion);
        }

        return errorM;
    }

    public String crearProdcutoConv(ProductoConvocatoriaVO prodConvVO) throws ControlException {
        String errorM = "";

        try {
            dbConexion = conexion.openConnection();
            convocatoriaDAO = new ConvocatoriaDAO(dbConexion);
            errorM = convocatoriaDAO.crearProdcutoConv(prodConvVO);
        } catch (SQLException ce) {
            ce.printStackTrace();
        } finally {
            conexion.closeConnection(dbConexion);
        }

        return errorM;
    }

    public List<ProyectoInvestigacionVO> listarProyectos() throws ControlException {
        List<ProyectoInvestigacionVO> listaProyecto = new ArrayList<ProyectoInvestigacionVO>();

        try {
            dbConexion = conexion.openConnection();
            convocatoriaDAO = new ConvocatoriaDAO(dbConexion);
            listaProyecto = convocatoriaDAO.listarProyectos();
        } catch (SQLException ce) {
            ce.printStackTrace();
        } finally {
            conexion.closeConnection(dbConexion);
        }

        return listaProyecto;
    }

    public List<ConvocatoriaVO> consultarConvocatorias(ConvocatoriaVO convocatoriaVO) throws ControlException {
        List<ConvocatoriaVO> listaConvocatorias = new ArrayList<ConvocatoriaVO>();

        try {
            dbConexion = conexion.openConnection();
            convocatoriaDAO = new ConvocatoriaDAO(dbConexion);
            listaConvocatorias = convocatoriaDAO.consultarConvocatorias(convocatoriaVO);
        } catch (SQLException ce) {
            ce.printStackTrace();
        } finally {
            conexion.closeConnection(dbConexion);
        }

        return listaConvocatorias;
    }

    public ConvocatoriaVO consultarConvocatoria(ConvocatoriaVO convocatoriaVO) throws ControlException {
        try {
            dbConexion = conexion.openConnection();
            convocatoriaDAO = new ConvocatoriaDAO(dbConexion);
            convocatoriaVO = convocatoriaDAO.consultarConvocatoria(convocatoriaVO);
        } catch (SQLException ce) {
            ce.printStackTrace();
        } finally {
            conexion.closeConnection(dbConexion);
        }

        return convocatoriaVO;
    }

    public String actualizarConvocatoria(ConvocatoriaVO convocatoriaVO) throws ControlException {
        String msg = "";

        try {
            dbConexion = conexion.openConnection();
            convocatoriaDAO = new ConvocatoriaDAO(dbConexion);
            msg = convocatoriaDAO.actualizarConvocatoria(convocatoriaVO);
        } catch (SQLException ce) {
            ce.printStackTrace();
        } finally {
            conexion.closeConnection(dbConexion);
        }

        return msg;
    }

    public void eliminarConvocatoria(ConvocatoriaVO convocatoriaVO) throws ConvocatoriaException {
        try {
            dbConexion = conexion.openConnection();
            convocatoriaDAO = new ConvocatoriaDAO(dbConexion);
            convocatoriaDAO.eliminarConvocatoria(convocatoriaVO);
            conexion.commit();
        } catch (ControlException ex) {
            try {
                Logger.getLogger(ConvocatoriasBO.class.getName()).log(Level.SEVERE, null, ex);
                conexion.rollback();
                throw new ConvocatoriaException("Error al hacer commit", ex);
            } catch (ControlException ex1) {
                Logger.getLogger(ConvocatoriasBO.class.getName()).log(Level.SEVERE, null, ex1);
                throw new ConvocatoriaException("Error al hacer rollback", ex1);
            }
        } catch (DAOException ex) {
            Logger.getLogger(ConvocatoriasBO.class.getName()).log(Level.SEVERE, null, ex);
            throw new ConvocatoriaException("Error: ConvocatoriasBO:eliminarConvocatoria", ex);
        } finally {
            conexion.closeConnection(dbConexion);
        }

    }

    public List<GrupoInvestigacionVO> consultarConvocatoriaGrupo(long idConvocatoria) throws ConvocatoriaException {
        try {
            dbConexion = conexion.openConnection();
            convocatoriaDAO = new ConvocatoriaDAO(dbConexion);
            return convocatoriaDAO.consultarConvocatoriaGrupo(idConvocatoria);
        } catch (DAOException ex) {
            Logger.getLogger(ConvocatoriasBO.class.getName()).log(Level.SEVERE, null, ex);
            throw new ConvocatoriaException("Error: ConvocatoriaBO:consultarConvocatoriaGrupo", ex);
        } finally {
            conexion.closeConnection(dbConexion);
        }
    }

    public List<PersonaVO> consultarConvocatoriaPersona(long idConvocatoria) throws ConvocatoriaException {
        try {
            dbConexion = conexion.openConnection();
            convocatoriaDAO = new ConvocatoriaDAO(dbConexion);
            return convocatoriaDAO.consultarConvocatoriaPersona(idConvocatoria);
        } catch (DAOException ex) {
            Logger.getLogger(ConvocatoriasBO.class.getName()).log(Level.SEVERE, null, ex);
            throw new ConvocatoriaException("Error: ConvocatoriaBO:consultarConvocatoriaPersona", ex);
        } finally {
            conexion.closeConnection(dbConexion);
        }
    }

    public String existeResultadoConvocatoria(long idConvocatoria) throws ConvocatoriaException {
        try {
            dbConexion = conexion.openConnection();
            convocatoriaDAO = new ConvocatoriaDAO(dbConexion);
            return convocatoriaDAO.existeResultadoConvocatoria(idConvocatoria);
        } catch (DAOException ex) {
            Logger.getLogger(ConvocatoriasBO.class.getName()).log(Level.SEVERE, null, ex);
            throw new ConvocatoriaException("Error: ConvocatoriaBO:existeResultadoConvocatoria", ex);
        }
    }
}
